"""
-------------------------------
- File_Name: config.py
- Date: 2025/2/8
- Author: yangzhide
- Email: xxzjyzd@126.com
- Description: 日志配置
-------------------------------
"""
from loguru import logger

"""日志loguru
⚠️：首次创建后，之后使用只需绑定到这个实例即可
1. 定义了一个app.log 用户记录所有日志，使用方式：
    log = add_module_logger('app','logs/app.log')
    log.debug("xxx")
    log.info("xxx")
    其他模块使用：log = logger.bind(module="app")
    ...
2. 定义一个add_module_logger,用于将日志输出到指定日志文件
    ob1 = add_module_logger('ob1','logs/ob1.log')
    ob2 = add_module_logger('ob2','logs/ob2.log')
    # 使用
    ob1.info("xxx") # 将记录到ob1.log 文件中
    ob2.info("xxx") # 将记录到ob2.log 文件中
    其他模块使用：log = logger.bind(module="ob1")
"""

# 日志格式化函数
formatter = (
    "{time:YYYY-MM-DD HH:mm:ss.SSS} |"     # 日期时间
    "<cyan>{extra[client_ip]}</cyan> |"    # ip地址
    "<level>{level:8}</level> |"           # 日志等级
    "{name} |"                             # 文件路径
    "{module} |"                           # 模块名
    "{line:4} |"                           # 执行行号
    "<cyan>{extra[module]}</cyan> |"       # 处理器名
    "<level>{message}</level>"             # 日志消息
)


# 创建模块特点的日志处理器
def add_module_logger(module_name, log_file, client_ip="127.0.0.1"):
    """记录到不同文件
    默认100MB
    """
    logger.configure(extra={"client_ip": client_ip, "module": module_name})

    # 该函数只允许来自特定模块的日志通过
    def module_filter(record):
        # 全局使用app记录所有日志
        if module_name not in ["app", None]:
            return record["extra"].get("module") == module_name
        return True
        # 为模块添加日志处理器

    logger.add(log_file, level="INFO", format=formatter, filter=module_filter, rotation="50 MB")

    # 返回一个绑定到该模块的logger（用于添加额外的上下文信息）
    return logger.bind(module=module_name, client_ip=client_ip)


# 创建不同的日志模块及保存文件
log = add_module_logger('app', 'logs/app.log')
ob1 = add_module_logger('ob1', 'logs/obb1.log')
